package cuiyt.offer;

/**
 * @author cyt
 * @create 2020-05-30 19:48
 */
public class T39 {

    /**
     * 输入一个整数数组，判断该数组是不是某二叉搜索树的后序遍历的结果。
     * 如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
     *
     * @param args
     */
    public static void main(String[] args) {

    }

    /**
     * BST的后序序列的合法序列是，对于一个序列S，最后一个元素是x （也就是根），如果去掉最后
     * 一个元素的序列为T，
     * 那么T满足：T可以分成两段，前一段（左子树）小于x，后一段（右子树）大于x，且这两段（子树）
     * 都是合法的后序序列。完美的递归定义 : ) 。
     *
     * @param sequence
     * @return
     */
    public boolean VerifySquenceOfBST(int[] sequence) {


        return  isOk(sequence, 0,sequence.length-1);

    }

    boolean isOk(int[] arr, int l, int r) {
        int temp = l;
        if (r <= l) return true;
        for (; temp < r; temp++) {
            if (arr[temp] > arr[r])
                break;
        }
        for (int j = temp; j < r; j++) {
            if (arr[r] > arr[j]) return false;
        }
        return isOk(arr, l, temp - 1) && isOk(arr, temp, r - 1);
    }
}
